// 光线
class Light {
    constructor () {
        this.instances = {}
    }
    init () {
        // AmbientLight 环境光会均匀的照亮场景中的所有物体。
        const ambientLight = new THREE.AmbientLight(0xffffff, 0.8)
        // 平行光(DirectionalLight): 平行光是沿着特定方向发射的光。这种光的表现像是无限远,从它发出的光线都是平行的。常常用平行光来模拟太阳光 的效果; 太阳足够远，因此我们可以认为太阳的位置是无限远，所以我们认为从太阳发出的光线也都是平行的。
        const shadowLight = new THREE.DirectionalLight(0xffffff, 0.3)

        shadowLight.position.set(10, 30, 20)
        shadowLight.castShadow = true
        // 网格(Mesh)
        // 基础网格材质(MeshBasicMaterial): 一个以简单着色（平面或线框）方式来绘制几何体的材质。
        var basicMaterial = new THREE.MeshBasicMaterial({ color: 0xffffff })
        // 平面缓冲几何体(PlaneGeometry): 一个用于生成平面几何体的类。
        this.shadowTarget = new THREE.Mesh(new THREE.PlaneGeometry(0.1, 0.1), basicMaterial)
        this.shadowTarget.visible = false
        this.shadowTarget.name = 'shadowTarget'
        // 平行光的方向是从它的位置(this.shadowTarget)到目标位置。
        shadowLight.target = this.shadowTarget
        // 阴影
        shadowLight.shadow.camera.near = 0.5
        shadowLight.shadow.camera.far = 500
        shadowLight.shadow.camera.left = -100
        shadowLight.shadow.camera.right = 100
        shadowLight.shadow.camera.bottom = -100
        shadowLight.shadow.camera.top = 100
        shadowLight.shadow.mapSize.width = 1024
        shadowLight.shadow.mapSize.height = 1024
        
        this.instances.ambientLight = ambientLight
        this.instances.shadowLight = shadowLight
        this.instances.shadowTarget = this.shadowTarget
    }
}

export default new Light()